package object2;

/**
 * 对象的多态
 */
public class PolyObject {

    public static void main(String[] args) {

        /*
            1)一个对象的编译类型和运行类型可以不一致
            2)编译类型在定义对象时就确定了，不能改变
            3)运行类型是可以变化的
            4)编译类型看定义时=号的左边，运行类型看=号的右边
         */

        //animal 编译类型 PolyAnimal，运行类型 Dogs
        PolyAnimal animal = new Dogs();
        //因为运行时，执行到该行时，animal运行类型是Dogs，所以cry就是Dogs的cry
        animal.cry();//小狗汪汪叫

        // 此时 animal编译类型 animal，运行类型就是 Cat
        animal = new Cat();
        animal.cry();//小猫喵喵叫...
    }
}

class PolyAnimal {

    public void cry() {
        System.out.println("Animal cry() 动物在叫...");
    }

}

class Cat extends PolyAnimal {

    public void cry() {
        System.out.println("Cat cry() 小猫喵喵叫...");
    }

}

class Dogs extends PolyAnimal {

    public void cry() {
        System.out.println("Dog cry() 小狗汪汪叫...");
    }
}